/**
 * 中国象棋位置相关常量
 */

// 棋盘尺寸
export const BOARD_SIZE = {
  ROWS: 10,
  COLS: 9
};

// 九宫格范围
export const PALACE_BOUNDS = {
  RED: {
    minRow: 7,
    maxRow: 9,
    minCol: 3,
    maxCol: 5
  },
  BLACK: {
    minRow: 0,
    maxRow: 2,
    minCol: 3,
    maxCol: 5
  }
};

// 河界位置
export const RIVER_BOUNDARY = {
  RED_SIDE: 5, // 红方一侧（行6-9）
  BLACK_SIDE: 4 // 黑方一侧（行0-4）
};

// 象的活动范围
export const ELEPHANT_BOUNDS = {
  RED: {
    minRow: 5,
    maxRow: 9
  },
  BLACK: {
    minRow: 0,
    maxRow: 4
  }
};

// 方向向量 - 用于移动计算
export const DIRECTIONS = {
  // 四个基本方向
  ORTHOGONAL: [
    [-1, 0], // 上
    [1, 0],  // 下
    [0, -1], // 左
    [0, 1]   // 右
  ],
  
  // 八个方向（包括斜向）
  ALL_EIGHT: [
    [-1, -1], [-1, 0], [-1, 1],
    [0, -1],           [0, 1],
    [1, -1],  [1, 0],  [1, 1]
  ],
  
  // 马的移动方向（日字形）
  KNIGHT_MOVES: [
    [-2, -1], [-2, 1], [-1, -2], [-1, 2],
    [1, -2],  [1, 2],  [2, -1],  [2, 1]
  ],
  
  // 马腿位置（用于检查蹩马腿）
  KNIGHT_BLOCKS: [
    [-1, 0], [-1, 0], [0, -1], [0, 1],
    [0, -1], [0, 1],  [1, 0],  [1, 0]
  ]
};

// 特殊位置标记
export const SPECIAL_POSITIONS = {
  // 九宫格中心点
  PALACE_CENTER: {
    RED: [8, 4],
    BLACK: [1, 4]
  },
  
  // 象眼位置
  ELEPHANT_EYES: [
    [2, 2], [2, 6], [7, 2], [7, 6]
  ]
};

/**
 * 检查位置是否在棋盘范围内
 */
export function isValidPosition(row, col) {
  return row >= 0 && row < BOARD_SIZE.ROWS && 
         col >= 0 && col < BOARD_SIZE.COLS;
}

/**
 * 检查位置是否在九宫格内
 */
export function isInPalace(row, col, color) {
  const bounds = PALACE_BOUNDS[color.toUpperCase()];
  return row >= bounds.minRow && row <= bounds.maxRow &&
         col >= bounds.minCol && col <= bounds.maxCol;
}

/**
 * 检查位置是否在己方区域
 */
export function isInOwnSide(row, color) {
  if (color === 'red') {
    return row >= RIVER_BOUNDARY.RED_SIDE;
  } else {
    return row <= RIVER_BOUNDARY.BLACK_SIDE;
  }
}

/**
 * 检查象是否在合法范围内
 */
export function isElephantInBounds(row, color) {
  const bounds = ELEPHANT_BOUNDS[color.toUpperCase()];
  return row >= bounds.minRow && row <= bounds.maxRow;
}
